/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.notaria.guerrasalas.be;

import com.notaria.guerrasalas.util.UtilGS;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name = "CLIENTE_JURIDICO")
@PrimaryKeyJoinColumn(name = "ID_CLIENTE_JURIDICO", referencedColumnName = "ID_PERSONA")
@DiscriminatorValue(value = "CJ")
public class ClienteJuridico
        extends Cliente
        implements Serializable {

    @Column(name = "PARTIDA_REGISTRAL", length = 20)
    private String partidaRegistral;
    @JoinColumn(name = "FID_REPRESENTANTE", referencedColumnName = "ID_CLIENTE_NATURAL", nullable = true)
    @OneToOne(fetch = FetchType.LAZY)
    private ClienteNatural representante;

    @PrePersist
    @PreUpdate
    private void formatearInformacion() {
        setNombres(UtilGS.quitarTildes(getNombres().trim().toUpperCase()));
        setApellidoPaterno(UtilGS.quitarTildes(getApellidoPaterno().trim().toUpperCase()));
        setApellidoMaterno(UtilGS.quitarTildes(getApellidoMaterno().trim().toUpperCase()));
        setEmail((getEmail() != null) ? getEmail().trim().isEmpty() ? "<<No especificado>>" : getEmail() : "<<No especificado>>");
        setNacionalidad((getNacionalidad() != null) ? getNacionalidad().trim().isEmpty() ? "<<No especificado>>" : getNacionalidad().toUpperCase() : "<<No especificado>>");
        setDireccion(getDireccion() != null ? getDireccion().trim().isEmpty() ? "<<No especificada>>" : getDireccion().trim().toUpperCase() : "<<No especificada>>");
        setPartidaRegistral(getPartidaRegistral() != null ? getPartidaRegistral().trim().isEmpty() ? "<<No especificada>>" : getPartidaRegistral().trim().toUpperCase() : "<<No especificada>>");
        setFechaActualizacion(new Date());
    }

    public ClienteJuridico() {
    }

    public ClienteJuridico(Long idClienteJuridico) {
        this.idPersona = idClienteJuridico;
    }

    public String getPartidaRegistral() {
        return partidaRegistral;
    }

    public void setPartidaRegistral(String partidaRegistral) {
        this.partidaRegistral = partidaRegistral;
    }

    public ClienteNatural getRepresentante() {
        return representante;
    }

    public void setRepresentante(ClienteNatural representante) {
        this.representante = representante;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Persona other = (Persona) obj;
        if (this.idPersona != other.idPersona && (this.idPersona == null || !this.idPersona.equals(other.idPersona))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 19 * hash + (this.idPersona != null ? this.idPersona.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return idPersona.toString();
    }

    @Override
    public String getNombreCompleto() {
        return getNombres();
    }

    @Override
    public String getDocumentoIdentificacion() {
        return getPartidaRegistral();
    }
}
